package com.tssup.fesco.common.frame.common;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.Date;

/**
 * 抽象BizService的基类，业务服务对象。
 * 开发BizService必须继承BaseService。
 *
 * @author darking
 */
@Service
@Transactional(readOnly = false)
public abstract class BaseService implements ContextManageBean {

    protected final Logger LOG = LoggerFactory.getLogger(getClass());

    /**
     * 当前bean的容器池
     */
    protected BeanFactory context;

    /**
     * 得到配置的bean的名字
     */
    protected String name;

    /**
     * 默认构造函数
     */
    public BaseService() {
        super();
    }

    /**
     * 设置bean的名字
     *
     * @param name bean的名字
     * @see org.springframework.beans.factory.BeanNameAware#setBeanName(String)
     */
    @Override
    public void setBeanName(String name) {
        this.name = name;
    }

    /**
     * spring的销毁方法
     * 开发可以自己覆盖自定义
     *
     * @see org.springframework.beans.factory.DisposableBean#destroy()
     */
    @Override
    public void destroy() {
    }

    /**
     * spring的初始化函数，用户可以重写，初始化参数
     *
     * @see org.springframework.beans.factory.InitializingBean#afterPropertiesSet()
     */
    @Override
    public void afterPropertiesSet() throws Exception {

    }

    /**
     * 用户自定义context对象
     *
     * @param beanFactory 可以自定义容器池
     * @throws org.springframework.beans.BeansException
     * @see org.springframework.beans.factory.BeanFactoryAware#setBeanFactory(BeanFactory)
     */
    @Override
    public void setBeanFactory(BeanFactory beanFactory) {
        this.context = beanFactory;
    }

    /**
     * 抽象类，子类实现获取当前子类实例的个数。
     * <p>
     * 之所以是抽象方法，是因为要用于在子类实现，获取具体子类的个数。
     *
     * @return 返回当前实现类的具体的个数。
     */
    public int getObjCount() {
        return 1;
    }

    ;

    protected Integer getTime() {
        return (int) (System.currentTimeMillis() / 1000);
    }
}
